﻿using System;
using System.Text;

namespace _021_值传递参数
{
    class Program
    {
        static void Foo(StringBuilder fooSB)
        {
            fooSB.Append("test");
            fooSB = null;
        }
        static void Main(string[] args)
        {
            // 值床底引用类型参数将赋值给引用而不是对象本身。
            // 在下面的例子中，Foo方法的StringBuilder对象和Main方法中实例化的是同一个对象，但是他们有不同的引用。
            // 换句话说，变量sb和fooSB是引用了同一个StringBuilder对象的不同变量
            StringBuilder sb = new StringBuilder();
            Foo(sb);
            Console.WriteLine(sb.ToString()); // test
            // 因为fooSB是引用的副本，把它赋值成null并没有把sb也赋值成null（然而，如果在声明和调用fooSB时使用ref修饰符，sb将会变成null。）
            Console.ReadKey();
        }
    }
}
